#ifndef __MYTLV__
#define __MYTLV__

typedef enum
{
    // 命令类型
    CD = 1 << 0,     // 进入对应目录
    LS = 1 << 1,     // 列出相应目录文件
    PWD = 1 << 2,    // 显示目前所在路径
    MKDIR = 1 << 3,  // 创建目录文件
    RMDIR = 1 << 4,  // 删除目录文件
    PUTS = 1 << 5,   // 将本地文件上传至服务器
    GETS = 1 << 6,   // 下载服务器文件到本地
    REMOVE = 1 << 7, // 删除服务器上的文件

    // 控制字段
    HASH = 1 << 8,    // 盐值, 哈希
    OVER = 1 << 9,    // 文件传输完成
    IS_OK = 1 << 10,  // 表示前一个指令执行结果
    LOGIN = 1 << 11,  // 表示登录指令
    RIGIST = 1 << 12, // 注册新用户
    TOKEN = 1 << 13,  // 第一次收到
    RES = 1 << 20,    // 消息提示
    SEFIE = 1 << 21 // 快传
} cmdstat_t;

typedef struct client_s
{
    char Name[1024];     // 用户名
    char Password[1024]; // 用户密码
} client_t;

// 登录成功后每次传输附带数据
typedef struct extra_data
{
    int cur_dir_id;
    char user[1024];
    char token[64];
} extra_data_t;

typedef struct train_s
{

    cmdstat_t cmdstat; // 存放命令和状态
    int length;        // 火车头，存放传输数据的长度
    char data[4096];   // 存放每次传输的数据
} train_t;
#pragma pack(push, 1) // 保存当前对齐设置，并设置为1字节对齐
typedef struct dir_item_s
{
    int id;
    char type[32];
    char file_name[128];
} dir_item_t;

typedef struct dir_lists_s
{
    int size;
    dir_item_t *item_head;
} dir_list_t;
// 文件结构
typedef struct file_mes
{
    int file_len;
    char file_name[64];
    char file_hash[64];
} file_mes_t;

#pragma pack(pop) // 恢复原始对齐设置

#endif // !__NETDISK_H__
